###############################################################
# Clase Cache
# representa la memoria del servidor. Contiene un arreglo de
# archivos, el cual tiene un máximo de @len_cache de tamaño
###############################################################
class Cache
	
	def initialize(max_cache)
		@len_cache = max_cache
		@arreglo = Array.new
	end

	#------------------------------------------------------
	# revisa si existe el archivo dentro del caché
	#------------------------------------------------------
	def exist(path)
		for i in @arreglo
			return true if(i.path == path)
		end
		return false
	end

	#------------------------------------------------------
	# agrega un nuevo archivo al caché
	# regresa si se tiene en caché o no
	#------------------------------------------------------
	def addToCache(path)
		if(exist(path))
			#ya existe, entonces no agregarlo
			return "caché"
		elsif(@arreglo.length== @len_cache)
			#ya llegó a su máximo, entonces borrar el primero y anexar al final
			@arreglo.delete(@arreglo.first)
			@arreglo << Archivo.new(path)
		else
			#sólo agregar
			@arreglo << Archivo.new(path)
		end
		return "disco"
	end

	#------------------------------------------------------
	# retorna el contenido del archivo con dirección path
	#------------------------------------------------------
	def getContent(path)
		if(exist(path))
			@arreglo.each do |i|
				if(i.path == path)
					return i.content
				end
			end
		else
			return ""
		end
	end
	
	#------------------------------------------------------
	# imprime toda la caché
	#------------------------------------------------------
	def printAll()
		for i in @arreglo
			puts ("nombre del archivo: " + i.path)
			puts ("contenido:\n"+i.content)
		end
	end
end


###############################################################
# Clase Archivo
# representa un archivo, que tiene su path y su contenido
###############################################################
class Archivo

	def initialize(path)
		@path = path
		@content = ""
		begin
			@content = File.open(path, 'r').read()
		rescue Errno::ENOENT
			print "\t - File not found: "+path
		end
	end
	#------------------------------------------------------
	# retorna ya sea @path  o @content
	#------------------------------------------------------
	attr_reader :path, :content
	attr_writer :path, :content
end
